<?php
namespace app\lib\doubao;

use think\facade\Cache;

class Doubao
{
    protected $apiKey = 'aa76b395-1014-4b20-b33c-b3dff943dd88';


    public function doubaoPro32k($question)
    {
        $headerss = array(
            'Content-Type: application/json',
            'Authorization: Bearer '.$this->apiKey
        );
        $data = [
            "model" => "ep-20241208151329-bm4pl",
            "messages" => [
                [
                    "role" => "user",
                    "content" =>  $question
                ]
            ]
        ];
        $data = json_encode($data);
        $response = curlPost('https://ark.cn-beijing.volces.com/api/v3/chat/completions',$data,$headerss);
        if (isset($response["choices"][0]["message"]["content"])) {
            return $response["choices"][0]["message"]["content"];
        } else {
            return "未找到有效响应内容";
        }
    }

    public function textRefresh($text,$num){
        $promot = "你的任务是根据给定脚本的语义，在不改变语义的情况下，通过调整语序或者改变文字对脚本进行修改，输出".$num."个不一样的语句。
以下是给定的脚本：
<text>
{{SCRIPT}}
</text>
在进行修改时，请遵循以下要求：
1. 确保修改后的语句与原脚本语义一致。
2. 尽量采用不同的表达方式和语序。
3. 输出的语句应通顺、合理。
请在<sentences>标签内写下修改后的".$num."个语句，每个语句占一行。
<sentences>
[在此写下修改后的".$num."个语句]
</sentences>";

        $combinedContent = str_replace('{{SCRIPT}}',$text,$promot);



        $response = $this->doubaoPro32k($combinedContent);
        return $response;
    }


    public function teaseapart($text,$num)
    {
        $promot = "你的任务是理解给定的直播话术的意思，并写出".$num."个不同版本的话术，每个版本仅通过打乱原话术的语序来生成。
请仔细阅读以下直播话术：
<直播话术>
{{LIVE_SPEECH}}
</直播话术>
在打乱语序时，请遵循以下规则：
1. 仅改变话术的语序，不修改任何字词。
2. 确保生成的每个版本都是通顺且表意明确的。
3.保证内容通顺。
请在<versions>标签内写下生成的".$num."个不同版本的直播话术，每个版本占一行。
<versions>
[在此依次写下".$num."个不同版本的直播话术]
</versions>";

        $combinedContent = str_replace('{{LIVE_SPEECH}}',$text,$promot);



        $response = $this->doubaoPro32k($combinedContent);
        return $response;


    }

    public function titleRefresh($text,$num){
        $promot = "你的任务是根据给定产品名，帮我各写".$num."条标题，尽量采用不同的表达方式和语序，每个标题字数严格控制在20字以内。
以下是给定的产品名：
<text>
{{SCRIPT}}
</text>
请在<sentences>标签内写下修改后的".$num."个标题，每个标题占一行。
<sentences>
[在此写下修改后的".$num."个标题]
</sentences>";

        $combinedContent = str_replace('{{SCRIPT}}',$text,$promot);



        $response = $this->doubaoPro32k($combinedContent);
        return $response;
    }

    public function aiText($pname, $nums, $texts)
    {
        $promot = "你的任务是根据给定产品名和给定的几段视频字幕，模仿这些字幕，帮我写出新的视频字幕和视频标题,要求：
1.标题风格和句式尽量多样化；
2.标题不要含有月份、季节；
3.要求符合抖音投流要求，不要有功效词；
4.第一句话必须是反问句或疑问句；
5.字幕按镜头数划分，每个镜头的话术中，中文+数字+标点符号的字数必须强制达到以下字数要求：";
        for ($i=1;$i<=count($nums);$i++) {
            if ($nums[$i-1]-2 < 6) {
                $min = 6;
            } else {
                $min = $nums[$i-1] - 3;
            }
            $max = $nums[$i-1] - 2;
            $promot = $promot."镜头{$i}：字数{$min}到{$max}之间，";
        }
        $promot = $promot."以下是给定的产品名（".$pname."）,给定的视频字幕：
<视频字幕>";
        foreach ($texts as $idx=>$text) {
            $no = $idx + 1;
            $promot = $promot.$no.".".$text["text"]."\n";
        }
        $promot = $promot."</视频字幕>
不要任何说明和解释，按照以下格式输出，每个镜头的字幕一行：
标题：XXX；
字幕：<第一句>\n<第二句>\n<第三句>\n";
        $response = $this->doubaoPro32k($promot);
        return $response;
    }

    public function aiTextNew($nums, $texts, $platform)
    {
        $text = "";
        $text_nums = "";
        $promot = "你的任务是参考提供的爆款短视频文案，生成一个新的适合短视频投放的文案和标题。请仔细阅读以下信息，并按照指示进行创作。
以下是3个爆款短视频文案：
<爆款短视频文案>
{{爆款短视频文案}}
</爆款短视频文案>
该文案需要生成的句子数量为：
<句子数量>
{{句子数量}}
</句子数量>
每句话的具体字数要求如下：
<各句字数要求>
{{各句字数要求}}
</各句字数要求>
标题的字数要求为：
<标题字数要求>
{{标题字数要求}}
</标题字数要求>
在创作文案时，请遵循以下指南：
1. 文案一定不能有违规词，不能有功效词，要符合抖音社区规范。
2. 文案开头需要吸睛。
3. 文案内容要有一定故事情节。
4. 文案一定不能有直播相关内容。
5. 每次生成标题尽量不一样。
6. 标题不要含有月份、季节。
请在<标题>标签内写下新生成的标题，<文案>标签内写下新生成的文案。";
        foreach ($texts as $t) {
            $text = $text.$t["text"]."\n";
        }
        $promot = str_replace('{{爆款短视频文案}}',$text,$promot);
        $promot = str_replace('{{句子数量}}',count($nums),$promot);

        for ($i=1;$i<=count($nums);$i++) {
            if ($nums[$i-1]-2 < 6) {
                $min = 6;
            } else {
                $min = $nums[$i-1] - 3;
            }
            $max = $min + 5;
            $text_nums = $text_nums."第{$i}句话{$min}个字以上不要超过{$max}个字\n";
        }
        $promot = str_replace('{{各句字数要求}}',$text_nums,$promot);

        $biaoti_nums = "15个字以上不要超过25个字";
        if ($platform == "douyin") {
            $biaoti_nums = "15个字以上不要超过28个字";
        }
        $promot = str_replace('{{标题字数要求}}',$biaoti_nums,$promot);

        $response = $this->doubaoPro32k($promot);
        return $response;
    }
}
